home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / haeberli / libimage / filbuf.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  1.6 KB  |  61 lines

  1. /*
  2.  * Copyright 1991, 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17. /*
  18.  *    ifilbuf -
  19.  *
  20.  *                Paul Haeberli - 1984
  21.  *
  22.  */
  23. #include    "image.h"
  24.  
  25. ifilbuf(image)
  26. register IMAGE *image;
  27. {
  28.     int size;
  29.  
  30.     if ((image->flags&_IOREAD) == 0)
  31.         return(EOF);
  32.     if (image->base==NULL) {
  33.         size = IBUFSIZE(image->xsize);
  34.         if ((image->base = ibufalloc(image)) == NULL) {
  35.             i_errhdlr("can't alloc image buffer\n");
  36.             return EOF;
  37.         }
  38.     }
  39.     image->cnt = getrow(image,image->base,image->y,image->z);
  40.     image->ptr = image->base;
  41.     if (--image->cnt < 0) {
  42.         if (image->cnt == -1) {
  43.             image->flags |= _IOEOF;
  44.             if (image->flags & _IORW)
  45.                 image->flags &= ~_IOREAD;
  46.         } else
  47.             image->flags |= _IOERR;
  48.         image->cnt = 0;
  49.         return -1;
  50.     }
  51.     if(++image->y >= image->ysize) {
  52.         image->y = 0;
  53.         if(++image->z >= image->zsize) {
  54.         image->z = image->zsize-1;
  55.         image->flags |= _IOEOF;
  56.         return -1;
  57.         }
  58.     }
  59.     return *image->ptr++ & 0xffff;
  60. }
  61.